package com.guodi.model.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.guodi.core.secure.LoginUser;
import com.guodi.core.secure.utils.AuthUtil;
import com.guodi.model.entity.IdtTargetValue;
import com.guodi.model.mapper.IdtTargetValueMapper;
import com.guodi.model.service.IIdtReportValueService;
import com.guodi.model.service.IIdtTargetValueService;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;
import java.util.Objects;

/**
 * @描述：指标目标值表 服务类
 * @作者: 彭辉
 * @日期: 2020-06-05
 */
@Service
public class IdtTargetValueServiceImpl extends ServiceImpl<IdtTargetValueMapper, IdtTargetValue> implements IIdtTargetValueService {

    @Resource
    public IdtTargetValueMapper idtTargetValueMapper;

    @Resource
    public IIdtReportValueService iIdtReportValueService;

    @Override
    public List<IdtTargetValue> listByKeyWord(String keyWord, Integer year, long pageSize, long start, String sort, String sortWay, String divisionCode, String orgId) {
        return idtTargetValueMapper.listByKeyWord(keyWord, year, pageSize,start,sort,sortWay,divisionCode,orgId);
    }

    @Override
    public Integer listByKeyWordCount(String keyWord,String orgId) {
        return idtTargetValueMapper.listByKeyWordCount(keyWord,orgId);
    }

    @Override
    public Integer listByKeyWordAndCodeCount(String keyWord, Integer year, String divisionCode, String orgId) {
        return idtTargetValueMapper.listByKeyWordAndCodeCount(keyWord,year,divisionCode,orgId);
    }

    @Override
    public String getNameByDivisionCode(String divisionCode) {
        return idtTargetValueMapper.getNameByDivisionCode(divisionCode);
    }

//    @Override
//    public void batchUpdateByAvtIndicatorsTargetValues(List<AvtIndicatorsTargetValue> avtIndicatorsTargetValues, boolean coverIdt) {
//        BladeUser currentUser = AuthUtil.getUser();
//        String deptId = Objects.isNull(currentUser) ? "" : currentUser.getDeptId();
//
//        List<IdtTargetValue> saveUpdateList = new ArrayList<>();
//        for (int i = 0; i < avtIndicatorsTargetValues.size(); i++) {
//            AvtIndicatorsTargetValue avtIndicatorsTargetValue = avtIndicatorsTargetValues.get(i);
//            String indicatorsId = avtIndicatorsTargetValue.getIndicatorsId();
//            String divisionCode = avtIndicatorsTargetValue.getDivisionCode();
//            int targetYear = Integer.parseInt(avtIndicatorsTargetValue.getYear());
//            String baseYear = avtIndicatorsTargetValue.getBaseYear();
//            String baseValue = avtIndicatorsTargetValue.getBaseValue();
//            String targetValue = avtIndicatorsTargetValue.getValue();
//
//            // 判断是否存在相同指标id与行政区划编码与相同年份 fixme: 循环查表
//            IdtTargetValue idtTargetValue = new IdtTargetValue();
//            LambdaQueryWrapper<IdtTargetValue> queryWrapper1 = new QueryWrapper().lambda();
//            queryWrapper1.eq(IdtTargetValue::getTargetYear, targetYear);
//            queryWrapper1.eq(IdtTargetValue::getDivisionCode, divisionCode);
//            queryWrapper1.eq(IdtTargetValue::getIndicatorsId, indicatorsId);
//            List<IdtTargetValue> sourceIdtTargetValueList = list(queryWrapper1);
//            if (sourceIdtTargetValueList.size() > 0) {
//                // todo: 存在, 不覆盖, 跳过
//                if(!coverIdt){
//                    continue;
//                }
//                idtTargetValue = sourceIdtTargetValueList.get(0);
//            }
//            if(StringUtils.isBlank(idtTargetValue.getId())){
//                prepareData(idtTargetValue, true);
//                idtTargetValue.setId(UuidUtil.get32UUID());
//            } else {
//                prepareData(idtTargetValue, false);
//            }
//
//            idtTargetValue.setBaseYear(baseYear);
//            idtTargetValue.setDivisionCode(divisionCode);
//            idtTargetValue.setBaseValue(baseValue);
//            idtTargetValue.setTargetYear(targetYear);
//            idtTargetValue.setTargetValue(targetValue);
//            idtTargetValue.setExplain("体检评估>成果上报审批成功后自动更新");
//            idtTargetValue.setOrgId(deptId);
//            idtTargetValue.setIndicatorsId(indicatorsId);
//
//            saveUpdateList.add(idtTargetValue);
//        }
//        if (saveUpdateList.size() > 0) {
//            // 批量保存更新
//            saveOrUpdateBatch(saveUpdateList);
//            // fixme: 循环查表和保存
//            for (IdtTargetValue idtTargetValue: saveUpdateList) {
//                //同步更新监测值的预警字段
//                iIdtMonitorValueService.updateWarnStatus(idtTargetValue.getIndicatorsId(), idtTargetValue.getDivisionCode(), idtTargetValue.getTargetYear()+"", idtTargetValue.getTargetValue());
//                iIdtReportValueService.updateStandard(idtTargetValue.getIndicatorsId(),idtTargetValue.getDivisionCode(),idtTargetValue.getTargetYear()+"",idtTargetValue.getTargetValue());
//            }
//        }
//    }

//    @Override
//    public void batchUpdateByAvtTargetIdtExcelReqDTOs(List<AvtTargetIdtExcelReqDTO> avtTargetIdtExcelReqDTOs, boolean coverIdt) {
//        if(CollectionUtils.isEmpty(avtTargetIdtExcelReqDTOs)){
//            return;
//        }
//
//        String deptId = AuthUtil.getUser().getDeptId();
//        List<IdtTargetValue> saveUpdateList = new ArrayList<>();
//        for (int i = 0; i < avtTargetIdtExcelReqDTOs.size(); i++) {
//            AvtTargetIdtExcelReqDTO excelReqDTO = avtTargetIdtExcelReqDTOs.get(i);
//            String indicatorsId = excelReqDTO.getIndicatorsId();
//            if(StringUtils.isBlank(indicatorsId)){
//                continue;
//            }
//            String divisionCode = excelReqDTO.getDivisionCode();
//            int targetYear = Integer.parseInt(excelReqDTO.getYear());
//            String baseYear = excelReqDTO.getBaseYear();
//            String baseValue = excelReqDTO.getBaseValue();
//            String targetValue = excelReqDTO.getValue();
//
//            // 判断是否存在相同指标id与行政区划编码与相同年份 fixme: 循环查表
//            IdtTargetValue idtTargetValue = new IdtTargetValue();
//            LambdaQueryWrapper<IdtTargetValue> queryWrapper1 = new QueryWrapper().lambda();
//            queryWrapper1.eq(IdtTargetValue::getTargetYear, targetYear);
//            queryWrapper1.eq(IdtTargetValue::getDivisionCode, divisionCode);
//            queryWrapper1.eq(IdtTargetValue::getIndicatorsId, indicatorsId);
//            List<IdtTargetValue> sourceIdtTargetValueList = list(queryWrapper1);
//            if (sourceIdtTargetValueList.size() > 0) {
//                // todo: 存在数据, 不覆盖, 跳过
//                if(!coverIdt){
//                    continue;
//                }
//                idtTargetValue = sourceIdtTargetValueList.get(0);
//            }
//            if(StringUtils.isBlank(idtTargetValue.getId())){
//                prepareData(idtTargetValue, true);
//                idtTargetValue.setId(UuidUtil.get32UUID());
//            } else {
//                prepareData(idtTargetValue, false);
//            }
//
//            idtTargetValue.setBaseYear(baseYear);
//            idtTargetValue.setDivisionCode(divisionCode);
//            idtTargetValue.setBaseValue(baseValue);
//            idtTargetValue.setTargetYear(targetYear);
//            idtTargetValue.setTargetValue(targetValue);
//            idtTargetValue.setExplain("体检评估>上传成果后更新覆盖");
//            idtTargetValue.setOrgId(deptId);
//            idtTargetValue.setIndicatorsId(indicatorsId);
//
//            saveUpdateList.add(idtTargetValue);
//        }
//        if (saveUpdateList.size() > 0) {
//            // 批量保存更新
//            saveOrUpdateBatch(saveUpdateList);
//            // fixme: 循环查表和保存
//            for (IdtTargetValue idtTargetValue: saveUpdateList) {
//                //同步更新监测值的预警字段
//                iIdtMonitorValueService.updateWarnStatus(idtTargetValue.getIndicatorsId(), idtTargetValue.getDivisionCode(), idtTargetValue.getTargetYear()+"", idtTargetValue.getTargetValue());
//                iIdtReportValueService.updateStandard(idtTargetValue.getIndicatorsId(),idtTargetValue.getDivisionCode(),idtTargetValue.getTargetYear()+"",idtTargetValue.getTargetValue());
//            }
//        }
//    }
//
//    @Override
//    public Boolean checkIdtExistsByAvtTargetIdtExcelReqDTOs(List<AvtTargetIdtExcelReqDTO> avtTargetIdtExcelReqDTOs) {
//        if(CollectionUtils.isEmpty(avtTargetIdtExcelReqDTOs)){
//            return false;
//        }
//
//        for (int i = 0; i < avtTargetIdtExcelReqDTOs.size(); i++) {
//            AvtTargetIdtExcelReqDTO excelReqDTO = avtTargetIdtExcelReqDTOs.get(i);
//            String indicatorsId = excelReqDTO.getIndicatorsId();
//            if (StringUtils.isBlank(indicatorsId)) {
//                continue;
//            }
//            String divisionCode = excelReqDTO.getDivisionCode();
//            int targetYear = Integer.parseInt(excelReqDTO.getYear());
//
//            // 判断是否存在相同指标id与行政区划编码与相同年份 fixme: 循环查表
//            LambdaQueryWrapper<IdtTargetValue> condition = new QueryWrapper().lambda();
//            condition.select(IdtTargetValue::getId);
//            condition.eq(IdtTargetValue::getTargetYear, targetYear);
//            condition.eq(IdtTargetValue::getDivisionCode, divisionCode);
//            condition.eq(IdtTargetValue::getIndicatorsId, indicatorsId);
//            List<IdtTargetValue> entities = list(condition);
//            if(!CollectionUtils.isEmpty(entities)){
//                return true;
//            }
//        }
//
//        return false;
//    }

//    @Override
//    public Boolean checkIdtExistsByAvtIndicatorsTargetValues(List<AvtIndicatorsTargetValue> avtIndicatorsTargetValues) {
//        if(CollectionUtils.isEmpty(avtIndicatorsTargetValues)){
//            return false;
//        }
//
//        for (int i = 0; i < avtIndicatorsTargetValues.size(); i++) {
//            AvtIndicatorsTargetValue avtIndicatorsTargetValue = avtIndicatorsTargetValues.get(i);
//            String indicatorsId = avtIndicatorsTargetValue.getIndicatorsId();
//            String divisionCode = avtIndicatorsTargetValue.getDivisionCode();
//            int targetYear = Integer.parseInt(avtIndicatorsTargetValue.getYear());
//
//            // 判断是否存在相同指标id与行政区划编码与相同年份 fixme: 循环查表
//            LambdaQueryWrapper<IdtTargetValue> condition = new QueryWrapper().lambda();
//            condition.select(IdtTargetValue::getId);
//            condition.eq(IdtTargetValue::getTargetYear, targetYear);
//            condition.eq(IdtTargetValue::getDivisionCode, divisionCode);
//            condition.eq(IdtTargetValue::getIndicatorsId, indicatorsId);
//            List<IdtTargetValue> entities = list(condition);
//            if (!CollectionUtils.isEmpty(entities)) {
//                return true;
//            }
//        }
//
//        return false;
//    }

    private void prepareData(IdtTargetValue idtTargetValue, boolean isSave) {
        LoginUser currentUser = AuthUtil.getUser();
        String userId = Objects.isNull(currentUser) ? "" : String.valueOf(currentUser.getUserId());

        Date date = new Date();
        if (isSave) {
            idtTargetValue.setCreator(userId);
            idtTargetValue.setCreateTime(date);
            idtTargetValue.setModifier(userId);
            idtTargetValue.setModifyTime(date);
        } else {
            idtTargetValue.setModifier(userId);
            idtTargetValue.setModifyTime(date);
        }
    }
}